package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.common.CustomException;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.entity.Dish;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.entity.Setmeal;
import com.itheima.reggie.mapper.CategoryMapper;
import com.itheima.reggie.mapper.EmployeeMapper;
import com.itheima.reggie.service.CategoryService;
import com.itheima.reggie.service.DishService;
import com.itheima.reggie.service.EmployeeService;
import com.itheima.reggie.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author ：石破天
 * @date ：Created in 2022年11月16日
 * @description ：
 * @version: 1.0
 */
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {

    @Autowired
    private  DishService dishService;
    @Autowired
    private SetmealService setmealService;

    /**
     * 自己定义有关逻辑删除的方法
     * @param id
     */
    @Override
    public void remove(Long id) {
        // 设置查询条件   根据
        // 构建 条件构造器
        // 查哪个表 泛型写谁
        LambdaQueryWrapper<Dish>  wrapper1 = new LambdaQueryWrapper<>();
        wrapper1.eq(Dish::getCategoryId,id);
        // 根据分类id查询 有多少个菜品信息关联
        // 因为要查询dish表 所以需要 dishService
        // select count(*) from dish where category_id=id
        int count1 = dishService.count(wrapper1);//根据条件查询个数
// 查出结果了 如果结果大于0说明什么情况 有菜品关联
        // 不能删    抛异常.....有错误  抛出去
      if(count1>0){
          throw new CustomException("当前分类下关联了菜品,不能删除");
      }
        //根据 分类id 查询 多少个套餐信息关联
        LambdaQueryWrapper<Setmeal>  wrapper2 = new LambdaQueryWrapper<>();
        wrapper2.eq(Setmeal::getCategoryId,id);
        //select count(*) from setmeal where category_id=id
        int count2 = setmealService.count(wrapper2);//根据条件查询个数
        // 查出结果了 如果结果大于0说明什么情况 有套餐关联
        // 不能删    抛异常.....有错误  抛出去
        if(count2>0){
            throw new CustomException("当前分类下关联了套餐,不能删除");
        }
        //如果执行到这里 说明 分类下没有 菜品 也没有套餐
        // 调用正常删除功能即可
        removeById(id);
//        super.removeById(id);

    }
}
